import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import type { MCPServer } from '../types'
import api from '../api'

export const useServerStore = defineStore('servers', () => {
  const servers = ref<MCPServer[]>([])
  const isLoading = ref(false)
  const error = ref<string | null>(null)

  // 获取所有服务器
  const fetchServers = async () => {
    isLoading.value = true
    error.value = null
    
    try {
      // 从API获取数据
      const response = await api.servers.getAll()
      servers.value = response.data
      console.log(`已加载 ${servers.value.length} 个服务器数据`)
    } catch (err) {
      console.error('加载服务器数据失败:', err)
      error.value = '无法加载服务器数据'
      // 可以添加本地数据作为备份
    } finally {
      isLoading.value = false
    }
  }

  // 根据ID获取单个服务器
  const getServerById = async (id: string) => {
    try {
      const response = await api.servers.getById(id)
      return response.data
    } catch (err) {
      console.error(`获取服务器(ID:${id})数据失败:`, err)
      error.value = '无法获取服务器详情'
      return null
    }
  }

  // 添加新服务器
  const addServer = async (serverData: any) => {
    try {
      const response = await api.servers.create(serverData)
      // 添加到服务器列表
      servers.value.unshift(response.data)
      
      console.log('新服务器已添加:', response.data)
      return true
    } catch (err) {
      console.error('添加服务器失败:', err)
      error.value = '添加服务器失败'
      return false
    }
  }

  // 获取所有可用标签
  const allTags = computed(() => {
    const tags = new Set<string>()
    servers.value.forEach(server => {
      if (Array.isArray(server.tags)) {
        server.tags.forEach(tag => tags.add(tag))
      }
    })
    return Array.from(tags).sort()
  })

  return {
    servers,
    isLoading,
    error,
    fetchServers,
    getServerById,
    allTags,
    addServer
  }
}) 